import { ComponentInfoType, ComponentsStateType } from "."

/**
 * 获取下一个id
 * @param fe_id 当前的id
 * @param componentList 组件列表
 * @returns 如果没有选中就返回空，否则返回新的id
 */
export function getNextSelectedId(fe_id: string, componentList: ComponentInfoType[]) {
    // 只考虑已经显示的
    const visibleComponentList = componentList.filter(c => !c.isHidden)
    const index = visibleComponentList.findIndex(c => c.fe_id === fe_id)
    // 没有选中就不删
    if (index < 0) return ""

    // 重新计算 selectedId
    let newSelectedId = ""
    // 获取组件列表长度（画布当中的）
    const length = visibleComponentList.length
    if (length <= 1) {
        // 组件长度就一个，被删除了，就没有组件了
        newSelectedId = ""
    } else {
        // 组件长度大于1
        if (index + 1 === length) {
            // 要删除的恰好是最后一个，就选中上一个
            newSelectedId = visibleComponentList[index - 1].fe_id
        } else {
            // 要删除的不是最后一个，就选中下一个
            newSelectedId = visibleComponentList[index + 1].fe_id
        }
    }
    return newSelectedId
}

/**
 * 插入新组件
 * @param state state
 * @param newComponent 新组件
 */
export function insertNewComponent(state: ComponentsStateType, newComponent: ComponentInfoType) {
    const { selectedId, componentList } = state
    const index = componentList.findIndex(c => c.fe_id === selectedId)

    if (index < 0) {
        // 未选中任何组件
        state.componentList.push(newComponent)
    } else {
        // 选中了组件，插入到index后面
        state.componentList.splice(index + 1, 0, newComponent)
    }
    state.selectedId = newComponent.fe_id
}
